# 元组是不可以修改的
# 元组的创建
"""
a = 10,20,30
a1 = (10,20,30)
print(a)
print(a1)

b = (3,)
print(b)

b1 = tuple() # 创建了一个空元组对象
b = tuple(range(3))
print(b) #(0, 1, 2)
b = tuple("abc")
print(b) # ('a', 'b', 'c')
"""
# 元组的元素访问和计数
"""
a = (20,30,9,8,3)
a = [0] # a变量重新赋值是可以
print(a)

a[3] = 33 # 修改a变量的元素就不行了，因为a是元组
print(a) # IndexError: list assignment index out of range
"""
# 元组的访问和列表是一样的，返回的对象是元组的
"""
a=(20,10,30,9,8,20)
print(a[0]) # 20
print(a[-1]) # 8
print(a[2:4]) # 30,9
#获取元素的下标和计数
print(a.index(20)) # 0
print(a.count(20)) # 2
"""
# 排序的方法
"""
a = (20,10,30,9,8,5)
print(sorted(a)) # 返回对象是列表：[5, 8, 9, 10, 20, 30]
"""
# 元组的拼接
"""
a = (20,10,30,9,8)
b = 1,30
print(a+b) # 创建了一个新的元组，内容为a和b两个元组的结果
"""
# 元组获取长度，最大值，最小值，总和
"""
a = (20,10,30,9,8)
print(max(a)) # 30
print(min(a)) # 8
print(sum(a)) # 77
print(len(a)) # 5
"""
# zip对象
# zip(列表1,列表2,......)将多个列表对于位置的元素组合成为元组,并返回这个zip对象
"""
a=[10,20,30]
b=[40,50,60]
c=[60,80,90]
b1 = zip(a,b,c)
print(list(b1))
"""
# 生成器推导式创建元组(重点)
"""
s = (x*2 for x in range(5)) #
print(s)  # 生成器对象
print(tuple(s)) # (0, 2, 4, 6, 8)
print(tuple(s)) # ()
"""
x = (x*2 for x in range(5)) # 0，2，4，6，8， 10？
print(x)
print(x.__next__()) # 0
print(x.__next__()) # 2
print(x.__next__())# 4
print(x.__next__()) # 6
print(x.__next__())# 8
# print(x.__next__())
# print(x.__next__()) # StopIteration
# for i in x:
#     print(i)
"""
for循环底层用的也是这种next下一个的机制，但是它拿到最后一个就会停止掉，
不会报错
"""




